#include "pagedeviceinfo.h"
#include "ui_pagedeviceinfo.h"
#include "pageusermgmt.h"
#include "ui_pageusermgmt.h"
#include <QMessageBox>
#include <QSqlError>
#include <QDebug>
#include <QComboBox>
#include <QFormLayout>
#include <QDialogButtonBox>
#include <QDateEdit>
#include <QLineEdit>
#include <QLayout>
#include <QPainter>

pageDeviceInfo::pageDeviceInfo(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::pageDeviceInfo)
{
    ui->setupUi(this);
    // 使用 DatabasePool 获取数据库连接
    QSqlDatabase db = DatabasePool::instance().getConnection();
    if (!db.isOpen()) {
        qDebug() << "无法打开数据库: " << db.lastError().text();
        return;
    }
    m_model = new QSqlTableModel(this, db);
    m_model->setTable("devices");
    m_model->setEditStrategy(QSqlTableModel::OnManualSubmit);

    // 设置表头
    m_model->setHeaderData(0, Qt::Horizontal, tr("设备ID"));
    m_model->setHeaderData(1, Qt::Horizontal, tr("设备名称"));
    m_model->setHeaderData(2, Qt::Horizontal, tr("类型"));
    m_model->setHeaderData(3, Qt::Horizontal, tr("位置"));
    m_model->setHeaderData(4, Qt::Horizontal, tr("制造商"));
    m_model->setHeaderData(5, Qt::Horizontal, tr("型号"));
    m_model->setHeaderData(6, Qt::Horizontal, tr("状态"));
    m_model->setHeaderData(7, Qt::Horizontal, tr("安装日期"));

    if (!m_model->select()) {
        QMessageBox::critical(this, "错误", "无法加载设备数据: " + m_model->lastError().text());
    }

    // 配置代理模型
    m_proxyModel = new QSortFilterProxyModel(this);
    m_proxyModel->setSourceModel(m_model);
    m_proxyModel->setFilterKeyColumn(1); // 按设备名称搜索

    // 配置表格视图
    ui->tableView->setModel(m_proxyModel);

    // 连接信号槽
    connect(ui->lineEditSearch, &QLineEdit::textChanged, this, &pageDeviceInfo::onSearch);
    connect(ui->btnRefresh, &QPushButton::clicked, this, &pageDeviceInfo::refreshTable);

    // 创建居中委托实例
    CenteredItemDelegate *centeredDelegate = new CenteredItemDelegate(this);
    for (int col = 0; col < m_model->columnCount(); ++col) {
        if (col != 6) {
            ui->tableView->setItemDelegateForColumn(col, centeredDelegate);
        }
    }

    // 用户名列（第1列）设置只读委托
    ui->tableView->setItemDelegateForColumn(0, new ReadOnlyDelegate(this));
    ui->tableView->setItemDelegateForColumn(7, new ReadOnlyDelegate(this));

    // 自适应列宽
    ui->tableView->resizeColumnsToContents();
    // 手动加宽特定列（单位：像素）
    ui->tableView->setColumnWidth(6, 90);
    ui->tableView->setColumnWidth(7, 180);
}

pageDeviceInfo::~pageDeviceInfo()
{
    delete ui;
}

//刷新功能
void pageDeviceInfo::refreshTable()
{
    m_model->select();
    m_proxyModel->invalidate();
    ui->tableView->resizeColumnsToContents();
    ui->tableView->setColumnWidth(6, 90);
    ui->tableView->setColumnWidth(7, 180);
}

//搜索功能
void pageDeviceInfo::onSearch(const QString &text)
{
    m_proxyModel->setFilterFixedString(text);
}
